﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
//
//int main()
//{
//	cout << "hello world" << endl;
//	return 0;
//}
//#include <stdlib.h>
//#include <stdio.h>
//namespace space
//{
//    int rand = 10;
//}
//int main()
//{
//    printf("%d\n", space::rand);
//    return 0;
//}
//#include <iostream>
//using namespace std;
//int main()
//{
//	int a = 0;
//	double b = 0.1;
//	char c = 'x';
//	cout << a << " " << b << " " << c << endl;
//	std::cout << a << " " << b << " " << c << std::endl;
//	scanf("%d%lf", &a, &b);
//	printf("%d %lf\n", a, b);
//	cin >> a;
//	cin >> b >> c;
//	cout << a << endl;
//	cout << b << " " << c << endl;
//	return 0;
//}
//#include<iostream>
//using namespace std;
//void Fun(int n = 4)
//{
//	cout << n << endl;
//}
//void main()
//{
//	Fun();
//	Fun(100);
//	return 0;
//}
//#include<iostream>
//using namespace std;
////全缺省
//void Fun1(int a = 0, int b = 1, int c = 2)
//{
//	cout << "a=" << a << " ";
//	cout << "b=" << b << " ";
//	cout << "c=" << c << endl;
//}
////半缺省
//void Fun2(int a, int b, int c = 0)
//{
//	cout << "a=" << a << " ";
//	cout << "b=" << b << " ";
//	cout << "c=" << c << endl;
//}
//int main()
//{
//	Fun1();
//	Fun1(6, 6, 6);
//	Fun2(7, 7);
//	Fun2(7, 7, 7);
//	return 0;
//}
//#include<iostream>
//using namespace std;
//int main()
//{
//	int a = 0;
//	double b = 0.1;
//	char c = 'x';
//	cout << a << " " << b << " " << c << endl;
//	std::cout << a << " " << b << " " << c << std::endl<<std::endl;
//
//	scanf("%d %lf %c", &a, &b, &c);
//	printf("%d %lf %c\n\n", a, b, c);
//
//	cin >> a >> b >> c;
//	cout << a <<" " << b << " " << c << endl;
//	return 0;
//}
//#include<iostream>
//using namespace std;
//
//int main()
//{
//	int a = 0;
//	int& b = a;
//	int& c = b;
//	c++;
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c<< endl;
//	cout << a << endl;
//	cout << c << endl;
//}

//#include<iostream>
//using namespace std;
//int main()
//{
//	int a = 10;
//	// 编译报错：“ra”: 必须初始化引⽤
//	//int& ra;
//	int& b = a;
//	int c = 20;
//	// 这⾥并⾮让b引⽤c，因为C++引⽤不能改变指向，
//	// 这⾥是⼀个赋值
//	b = c;
//	cout << &a << endl;
//	cout << &b << endl;
//	cout << &c << endl;
//	cout << a << endl;
//	cout << b << endl;
//	cout << c << endl;
//	return 0;
//}

//void swap(int& rx, int& ry)
//{
//	int temp = rx;
//	rx = ry;
//	ry = temp;
//}
//int main()
//{
//	int x = 0, y = 1;
//	cout << x << " " << y << endl;
//	swap(x, y);
//	cout << x << " " << y << endl;
//	return 0;
//}
//int main()
//{
//	const int a = 10;
//	// 编译报错：error C2440: “初始化”: ⽆法从“const int”转换为“int &”
//	// 这⾥的引⽤是对a访问权限的放⼤
//	//int& ra = a;
//	// 这样才可以
//	const int& ra = a;
//	// 编译报错：error C3892: “ra”: 不能给常量赋值
//	//ra++;
//	// 这⾥的引⽤是对b访问权限的缩⼩
//	int b = 20;
//	const int& rb = b;
//	// 编译报错：error C3892: “rb”: 不能给常量赋值
//	//rb++;
//	cout << b<< " " << rb << endl;
//	b++;
//	cout << b << " " << rb << endl;
//	return 0;
//}
//int main()
//{
//	int a = 10;
//	const int& ra = 30;
//
//	// 编译报错: “初始化”: ⽆法从“int”转换为“int &”
//	// int& rb = a * 3;
//	const int& rb = a * 3;
//	double d = 12.34;
//	
//	// 编译报错：“初始化”: ⽆法从“double”转换为“int &”
//	// int& rd = d;
//	const int& rd = d;
//
//	cout << d << " " << rd << endl;
//	return 0;
//}
//inline int Add(int x, int y)
//{
//	int ret = x + y;
//	ret += 1;
//	ret += 1;
//	ret += 1;
//	return ret;
//} 
//int main()
//{
//	// 可以通过汇编观察程序是否展开
//	// 有call Add语句就是没有展开，没有就是展开了
//	int ret = Add(1, 2);
//	cout << Add(1, 2) * 5 << endl;
//	return 0;
//}
#include<iostream>
using namespace std;

// 实现⼀个ADD宏函数的常⻅问题
//#define ADD(int a, int b) return a + b;
//#define ADD(a, b) a + b;
//#define ADD(a, b) (a + b)
// 
// 正确的宏实现
//#define ADD(a, b) ((a) + (b))
//int main()
//{
//	int ret = ADD(1, 2);
//	cout << ADD(1, 2) << endl;
//	cout << ADD(1, 2) * 5 << endl;
//	int x = 1, y = 2;
//	ADD(x & y, x | y); // -> (x&y+x|y)
//	return 0;
//}
//#include "F.h"
//int main()
//{
//	f(10);
//	return 0;
//}
//#include<iostream>
//using namespace std;
//void f(int x)
//{
//	cout << "f(int x)" << endl;
//} 
//void f(int* ptr)
//{
//	cout << "f(int* ptr)" << endl;
//} 
//int main()
//{
//	f(0);
//	f(NULL);
//
//	f(nullptr);
//	return 0;
//}
//#include<iostream>
//using namespace std;
//class Stack
//{
//	p
//		ublic :
//	// 成员函数
//	void Init(int n = 4)
//	{
//		array = (int*)malloc(sizeof(int) * n);
//		if (nullptr == array)
//		{
//			perror("malloc申请空间失败");
//			return;
//		} c
//			apacity = n;
//		top = 0;
//	} v
//		oid Push(int x)
//	{
//		// ...扩容
//		array[top++] = x;
//	}
//	int Top()
//	{
//		assert(top > 0);
//		return array[top - 1];
//	} v
//		oid Destroy()
//	{
//		free(array);
//		array = nullptr;
//		top = capacity = 0;
//	}
//private:
//	// 成员变量
//	int* array;
//	size_t capacity;
//	size_t top;
//}; // 分号不能省略
//int main()
//{
//	Stack st;
//	st.Init();
//	st.Push(1);
//	st.Push(2);
//	cout << st.Top() << endl;
//	st.Destroy();
//	return 0;
//}